class Concurso::ObjetivoController < ApplicationController

  def index
    list
    render :action => "list"
  end
  
  def new
    @concurso = Concurso.new
    ConcursoObjetivo::DESCRIPCIONES.each do |d|
      @concurso.concurso_objetivos << ConcursoObjetivo.new(:objetivo => d)
    end
    ejecutivo = Ejecutivo.find(session[:user])
    @centros = ejecutivo.centros
    
  end

  def create
    @concurso = Concurso.new(params[:concurso])
    @concurso.tipo = Concurso::OBJETIVOS
    @concurso.ejecutivo_id = session[:user]
    
    if perfil_ejecutivo?
      @concurso.status_id = 0
    elsif mando_medio?
      @concurso.status_id = 1
    end

    if @concurso.save
      logger.debug "Guardando concurso..."
      flash[:notice] = "El Concurso se agrego correctamente."
      redirect_to :action => "index"
      
    else
      ejecutivo = Ejecutivo.find(session[:user])
      @centros = ejecutivo.centros
      
      render :action => "new"
      
    end
  end
  
  def list
    conditions = {}
    conditions[:tipo] = Concurso::OBJETIVOS
    conditions[:status_id] = 1
    conditions[:ejecutivo_id] = find_children_ids(Ejecutivo.find(session[:user]))
    
    if !perfil_nacional?
      conditions[:ejecutivo_id] = session[:user]
      
    end
    
    @concursos = Concurso.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'fecha_inicio DESC', :conditions => conditions
    
  end

  def show
    @concurso = Concurso.find(params[:id])
  end
  
  def txt_export
    ejecutivo = Ejecutivo.find(session[:user])
    these_children = find_children_ids(ejecutivo)

    if perfil_nacional?
      @concursos = Concurso.find(:all)
    else
      conditions = {}
      conditions[:ejecutivo_id] = these_children
      @concursos = Concurso.find(:all, :conditions => conditions)
    end
    
    report = StringIO.new
    CSV::Writer.generate(report, ',') do |csv|
      # encabezados
      csv << [
        "No Concurso", "Centro de Consumo", "Nombre", "Fecha Inicio", "Fecha Termino",
        "Observaciones", "Objetivo", "Puntos por objetivo"
      ]
      
      @concursos.each do |c|
        c.concurso_objetivos.each do |o|
          csv << [
            o.concurso.consecutivo, Centro.find(o.concurso.centro_id).nombre_comercial, o.concurso.nombre, o.concurso.fecha_inicio, o.concurso.fecha_termino,
            o.concurso.observaciones, o.objetivo, o.puntos
          ]
        end
      end
    end
    
    report.rewind
    send_data(report.read,
      :type => 'text/csv; charset=iso-8859-1; header=present',
      :filename => 'concursos-objetivos.csv')
    
  end
  
  def edit
    @concurso = Concurso.find(params[:id])
    @status = Catalogo.find_by_nombre('Status Items').entradas_catalogo
    
  end
  
  def update
    @concurso = Concurso.find(params[:id])
    if @concurso.update_attributes(params[:concurso])
      flash[:notice] = 'El Concurso se actualizo correctamente.'
      redirect_to :action => 'list'
      
    else
      render :action => 'edit', :id => @concurso
      
    end
    
  end
  
  def search
    unless params[:search].blank?
      conditions = ["tipo=3 AND concatenado LIKE ? AND ejecutivo_id=?",
        "%#{params[:search]}%",
       session[:user]] unless params[:search].nil?
      @concursos = BusquedaConcurso.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
        :order => 'fecha_inicio DESC',
        :conditions => conditions
      #      :conditions => Centro.conditions_by_like(params[:search])
      @concursos_count = @concursos.size
      logger.info "Resultado de la busqueda: #{@concursos_count} concursos encontrados"
    else
      list
    end
    render :action =>'search', :layout => true
    
  end
end
